package controller;

import eccezioni.AnnuncioChiusoException;
import eccezioni.CampoErratoException;
import entity.Adesione;
import entity.Articolo;
import entity.UtenteRegistrato;
import java.util.List;
import javax.ejb.Local;

/**
 * Metodi per l'iscritto all'annuncio
 * @author Ale
 */
@Local
public interface ControllerIscrizioneAnnuncioLocal {

    /**
     * Salva nel database l'adesione temporanea in input
     * @param ad adesione temporanea da salvare
     */
    public void salvaAdesioneTemporanea(Adesione ad);

    /**
     * Disiscrive un utente da un annuncio non ancora chiuso a cui aveva aderito
     * @param ad l'adesione di un utente a un annuncio
     * @throws AnnuncioChiusoException se l'annuncio a cui l'adesione si riferisce è già chiuso
     */
    public void disiscriviDaAnnuncio(Adesione ad) throws AnnuncioChiusoException;

    /**
     * Crea un articolo ma senza salvarlo nel database
     * @param urlArticolo url a cui si può acquistare l'articolo
     * @param prezzoStr prezzo dell'articolo
     * @param note eventuali note sull'articolo
     * @return il nuovo articolo
     * @throws CampoErratoException se uno o più dati forniti hanno un formato errato
     */
    public Articolo creaArticolo(java.lang.String urlArticolo, java.lang.String prezzoStr, java.lang.String note) throws CampoErratoException;

    /**
     * Salva il pagamento relativo a un'adesione
     * @param idAdesione l'adesione pagata
     */
    public void salvaPagamento(long idAdesione);

    /**
     * Verifica se l'utente in input ha già un'adesione o più ancora aperta per lo stesso sito
     * @param utenteLoggato l'utente la cui adesioen va verificata
     * @param sito il sito da cercare tra le adesioni dell'utente
     * @return la lista di adesioni dell'utente ancora aperte per lo stesso sito
     */
    public List<Adesione> checkIscrittoSito(UtenteRegistrato utenteLoggato, String sito);
    
}
